home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / nfpatchs.zip / TEMPFILE.PRG < prev    next >
Text File  |  1991-10-03  |  4KB  |  142 lines

  1. /*
  2.  * File......: TEMPFILE.PRG
  3.  * Author....: Glenn Scott
  4.  * CIS ID....: 71620,1521
  5.  * Date......: $Date:   03 Oct 1991 18:36:28  $
  6.  * Revision..: $Revision:   1.6  $
  7.  * Log file..: $Logfile:   E:/nanfor/src/tempfile.prv  $
  8.  * 
  9.  * This is an original work by Glenn Scott and is placed in the
  10.  * public domain.
  11.  *
  12.  * Modification history:
  13.  * ---------------------
  14.  *
  15.  * $Log:   E:/nanfor/src/tempfile.prv  $
  16.  * 
  17.  *    Rev 1.6   03 Oct 1991 18:36:28   GLENN
  18.  * Tim Wong from Nantucket pointed out that this DOS function actually
  19.  * leaves a file handle in AX.  In order to preserve the functionality,
  20.  * I now fclose() that handle if the call is succsessful.
  21.  * 
  22.  *    Rev 1.5   15 Aug 1991 23:05:04   GLENN
  23.  * Forest Belt proofread/edited/cleaned up doc
  24.  * 
  25.  *    Rev 1.4   17 Jul 1991 22:11:18   GLENN
  26.  * Stripped off chr(0)s in the return value (aRegs[DS])
  27.  * 
  28.  *    Rev 1.3   03 Jul 1991 01:08:08   GLENN
  29.  * Changed one line in FT_TEST driver ( cHide == "Y" )
  30.  * 
  31.  *    Rev 1.2   14 Jun 1991 19:53:10   GLENN
  32.  * Minor edit to file header
  33.  * 
  34.  *    Rev 1.1   12 Jun 1991 02:45:40   GLENN
  35.  * Documentation mods, and convert to new ft_int86() syntax, return value.
  36.  * 
  37.  *    Rev 1.0   01 Apr 1991 01:02:24   GLENN
  38.  * Nanforum Toolkit
  39.  *
  40.  */
  41.  
  42.  
  43. /*  $DOC$
  44.  *  $FUNCNAME$
  45.  *     FT_TEMPFIL()
  46.  *  $CATEGORY$
  47.  *     DOS/BIOS
  48.  *  $ONELINER$
  49.  *     Create a file with a unique name
  50.  *  $SYNTAX$
  51.  *     FT_TEMPFIL( [ <cPath> ] [, <lHide> ] ) -> cFileSpec
  52.  *  $ARGUMENTS$
  53.  *     <cPath> is the directory where you want to create the temporary
  54.  *     file.  If you omit this argument, the root of the current drive
  55.  *     is assumed ("\").
  56.  *
  57.  *     If <lHide> is .T., then the file will be created with the hidden
  58.  *     attribute set.  The default is .F.
  59.  *  $RETURNS$
  60.  *     <cFileSpec> should be your path, including the name of the newly
  61.  *     created unique file.  Use this with FOPEN(), etc.
  62.  *
  63.  *     If a DOS error occurred when trying to create the file, a 
  64.  *     null string will be returned.
  65.  *
  66.  *  $DESCRIPTION$
  67.  *     This function uses DOS Interrupt 21, service 5Ah (Create temporary
  68.  *     file) to create a unique filename in a directory you specify.
  69.  *     There will be no extension.  After the file is created, you may
  70.  *     then fopen() it and do any i/o you need (see the test driver
  71.  *     in the source code).
  72.  *   
  73.  *     This function requires FT_INT86().
  74.  *  $EXAMPLES$
  75.  *     Create a unique file in the root of the current drive:
  76.  *
  77.  *            myFile := FT_TEMPFIL()
  78.  *
  79.  *     Create a unique file in the current directory and hide it:
  80.  *
  81.  *            myFile := FT_TEMPFIL(".\", .t.)
  82.  *
  83.  *     Create a unique file on another drive, but do not hide it:
  84.  *
  85.  *            myFile := FT_TEMPFIL("e:\nanfor\src\")
  86.  *  $END$
  87.  */
  88.  
  89. #include "FTINT86.CH"
  90.  
  91. #define DOS         33
  92. #define TEMPNAME    90
  93. #define FLAG_CARRY   0
  94.  
  95. #ifdef FT_TEST
  96.   FUNCTION MAIN( cPath, cHide )
  97.      LOCAL cFile, nHandle
  98.      cFile := FT_TEMPFIL( cPath, (cHide == "Y") )
  99.  
  100.      if !empty( cFile )
  101.         QOut( cFile )
  102.         nHandle := fopen( cFile, 1 )
  103.         fwrite( nHandle, "This is a test!" )
  104.         fclose( nHandle )
  105.      else
  106.         Qout( "An error occurred" )
  107.      endif
  108.   RETURN nil
  109. #endif
  110.  
  111.  
  112.  
  113. FUNCTION FT_TEMPFIL( cPath, lHide )
  114.   LOCAL aRegs[ INT86_MAX_REGS ], cRet
  115.  
  116.   cPath := iif( valType(cPath) != "C",           ;
  117.                    repl( chr(0),12) ,            ;
  118.                    cPath += repl( chr(0), 12 )   ;
  119.               )
  120.  
  121.   lHide := iif( valType(lHide) != "L", .f., lHide )
  122.  
  123.   aRegs[AX]        := MAKEHI( TEMPNAME )
  124.   aRegs[CX]        := iif( lHide, 2, 0 )
  125.   aRegs[DS]        := cPath
  126.   aRegs[DX]        := REG_DS
  127.  
  128.   FT_INT86( DOS, aRegs )
  129.  
  130.   /*  If carry flag is clear, then call succeeded and a file handle is
  131.    *  sitting in AX that needs to be closed. 
  132.    */
  133.  
  134.   if !ft_isBitOn( aRegs[FLAGS], FLAG_CARRY )
  135.      fclose( aRegs[AX] )
  136.      cRet := strtran( aRegs[DS], chr(0) )
  137.   else
  138.      cRet := ""
  139.   endif
  140.  
  141. RETURN cRet
  142.